function test1 (x) {
    assertEq(x | -1, -1);
    assertEq(-1 | x, -1);
    assertEq(x & -1, 1);
    assertEq(-1 & x, 1);
    assertEq(x ^ -1, -2);
    assertEq(-1 ^ x, -2);
    assertEq(x >> -1, 0);
    assertEq(-1 >> x, -1);
    assertEq(x >>> -1, 0);
    assertEq(-1 >>> x, 2147483647);
    assertEq(x << -1, -2147483648);
    assertEq(-1 << x, -2);
    assertEq(x | 1, 1);
    assertEq(1 | x, 1);
    assertEq(x & 1, 1);
    assertEq(1 & x, 1);
    assertEq(x ^ 1, 0);
    assertEq(1 ^ x, 0);
    assertEq(x >> 1, 0);
    assertEq(1 >> x, 0);
    assertEq(x >>> 1, 0);
    assertEq(1 >>> x, 0);
    assertEq(x << 1, 2);
    assertEq(1 << x, 2);
    assertEq(x | 0, 1);
    assertEq(0 | x, 1);
    assertEq(x & 0, 0);
    assertEq(0 & x, 0);
    assertEq(x ^ 0, 1);
    assertEq(0 ^ x, 1);
    assertEq(x >> 0, 1);
    assertEq(0 >> x, 0);
    assertEq(x >>> 0, 1);
    assertEq(0 >>> x, 0);
    assertEq(x << 0, 1);
    assertEq(0 << x, 0);
    assertEq(x | 0xffffffff, -1);
    assertEq(0xffffffff | x, -1);
    assertEq(x & 0xffffffff, 1);
    assertEq(0xffffffff & x, 1);
    assertEq(x ^ 0xffffffff, -2);
    assertEq(0xffffffff ^ x, -2);
    assertEq(x >> 0xffffffff, 0);
    assertEq(0xffffffff >> x, -1);
    assertEq(x >>> 0xffffffff, 0);
    assertEq(0xffffffff >>> x, 2147483647);
    assertEq(x << 0xffffffff, -2147483648);
    assertEq(0xffffffff << x, -2);
    assertEq(x | "10.6", 11);
    assertEq("10.6" | x, 11);
    assertEq(x & "10.6", 0);
    assertEq("10.6" & x, 0);
    assertEq(x ^ "10.6", 11);
    assertEq("10.6" ^ x, 11);
    assertEq(x >> "10.6", 0);
    assertEq("10.6" >> x, 5);
    assertEq(x >>> "10.6", 0);
    assertEq("10.6" >>> x, 5);
    assertEq(x << "10.6", 1024);
    assertEq("10.6" << x, 20);
    assertEq(x | 2147483648, -2147483647);
    assertEq(2147483648 | x, -2147483647);
    assertEq(x & 2147483648, 0);
    assertEq(2147483648 & x, 0);
    assertEq(x ^ 2147483648, -2147483647);
    assertEq(2147483648 ^ x, -2147483647);
    assertEq(x >> 2147483648, 1);
    assertEq(2147483648 >> x, -1073741824);
    assertEq(x >>> 2147483648, 1);
    assertEq(2147483648 >>> x, 1073741824);
    assertEq(x << 2147483648, 1);
    assertEq(2147483648 << x, 0);
    assertEq(x | 4294967296, 1);
    assertEq(4294967296 | x, 1);
    assertEq(x & 4294967296, 0);
    assertEq(4294967296 & x, 0);
    assertEq(x ^ 4294967296, 1);
    assertEq(4294967296 ^ x, 1);
    assertEq(x >> 4294967296, 1);
    assertEq(4294967296 >> x, 0);
    assertEq(x >>> 4294967296, 1);
    assertEq(4294967296 >>> x, 0);
    assertEq(x << 4294967296, 1);
    assertEq(4294967296 << x, 0);
    assertEq(x | undefined, 1);
    assertEq(undefined | x, 1);
    assertEq(x & undefined, 0);
    assertEq(undefined & x, 0);
    assertEq(x ^ undefined, 1);
    assertEq(undefined ^ x, 1);
    assertEq(x >> undefined, 1);
    assertEq(undefined >> x, 0);
    assertEq(x >>> undefined, 1);
    assertEq(undefined >>> x, 0);
    assertEq(x << undefined, 1);
    assertEq(undefined << x, 0);
    assertEq(x | null, 1);
    assertEq(null | x, 1);
    assertEq(x & null, 0);
    assertEq(null & x, 0);
    assertEq(x ^ null, 1);
    assertEq(null ^ x, 1);
    assertEq(x >> null, 1);
    assertEq(null >> x, 0);
    assertEq(x >>> null, 1);
    assertEq(null >>> x, 0);
    assertEq(x << null, 1);
    assertEq(null << x, 0);
    assertEq(x | false, 1);
    assertEq(false | x, 1);
    assertEq(x & false, 0);
    assertEq(false & x, 0);
    assertEq(x ^ false, 1);
    assertEq(false ^ x, 1);
    assertEq(x >> false, 1);
    assertEq(false >> x, 0);
    assertEq(x >>> false, 1);
    assertEq(false >>> x, 0);
    assertEq(x << false, 1);
    assertEq(false << x, 0);
    assertEq(x | true, 1);
    assertEq(true | x, 1);
    assertEq(x & true, 1);
    assertEq(true & x, 1);
    assertEq(x ^ true, 0);
    assertEq(true ^ x, 0);
    assertEq(x >> true, 0);
    assertEq(true >> x, 0);
    assertEq(x >>> true, 0);
    assertEq(true >>> x, 0);
    assertEq(x << true, 2);
    assertEq(true << x, 2);
    assertEq(x | -1.5, -1);
    assertEq(-1.5 | x, -1);
    assertEq(x & -1.5, 1);
    assertEq(-1.5 & x, 1);
    assertEq(x ^ -1.5, -2);
    assertEq(-1.5 ^ x, -2);
    assertEq(x >> -1.5, 0);
    assertEq(-1.5 >> x, -1);
    assertEq(x >>> -1.5, 0);
    assertEq(-1.5 >>> x, 2147483647);
    assertEq(x << -1.5, -2147483648);
    assertEq(-1.5 << x, -2);
}
test1(1)

function test2 (x) {
    assertEq(x | -1, -1);
    assertEq(-1 | x, -1);
    assertEq(x & -1, 0);
    assertEq(-1 & x, 0);
    assertEq(x ^ -1, -1);
    assertEq(-1 ^ x, -1);
    assertEq(x >> -1, 0);
    assertEq(-1 >> x, -1);
    assertEq(x >>> -1, 0);
    assertEq(-1 >>> x, 4294967295);
    assertEq(x << -1, 0);
    assertEq(-1 << x, -1);
    assertEq(x | 1, 1);
    assertEq(1 | x, 1);
    assertEq(x & 1, 0);
    assertEq(1 & x, 0);
    assertEq(x ^ 1, 1);
    assertEq(1 ^ x, 1);
    assertEq(x >> 1, 0);
    assertEq(1 >> x, 1);
    assertEq(x >>> 1, 0);
    assertEq(1 >>> x, 1);
    assertEq(x << 1, 0);
    assertEq(1 << x, 1);
    assertEq(x | 0, 0);
    assertEq(0 | x, 0);
    assertEq(x & 0, 0);
    assertEq(0 & x, 0);
    assertEq(x ^ 0, 0);
    assertEq(0 ^ x, 0);
    assertEq(x >> 0, 0);
    assertEq(0 >> x, 0);
    assertEq(x >>> 0, 0);
    assertEq(0 >>> x, 0);
    assertEq(x << 0, 0);
    assertEq(0 << x, 0);
    assertEq(x | 0xffffffff, -1);
    assertEq(0xffffffff | x, -1);
    assertEq(x & 0xffffffff, 0);
    assertEq(0xffffffff & x, 0);
    assertEq(x ^ 0xffffffff, -1);
    assertEq(0xffffffff ^ x, -1);
    assertEq(x >> 0xffffffff, 0);
    assertEq(0xffffffff >> x, -1);
    assertEq(x >>> 0xffffffff, 0);
    assertEq(0xffffffff >>> x, 4294967295);
    assertEq(x << 0xffffffff, 0);
    assertEq(0xffffffff << x, -1);
    assertEq(x | "10.6", 10);
    assertEq("10.6" | x, 10);
    assertEq(x & "10.6", 0);
    assertEq("10.6" & x, 0);
    assertEq(x ^ "10.6", 10);
    assertEq("10.6" ^ x, 10);
    assertEq(x >> "10.6", 0);
    assertEq("10.6" >> x, 10);
    assertEq(x >>> "10.6", 0);
    assertEq("10.6" >>> x, 10);
    assertEq(x << "10.6", 0);
    assertEq("10.6" << x, 10);
    assertEq(x | 2147483648, -2147483648);
    assertEq(2147483648 | x, -2147483648);
    assertEq(x & 2147483648, 0);
    assertEq(2147483648 & x, 0);
    assertEq(x ^ 2147483648, -2147483648);
    assertEq(2147483648 ^ x, -2147483648);
    assertEq(x >> 2147483648, 0);
    assertEq(2147483648 >> x, -2147483648);
    assertEq(x >>> 2147483648, 0);
    assertEq(2147483648 >>> x, 2147483648);
    assertEq(x << 2147483648, 0);
    assertEq(2147483648 << x, -2147483648);
    assertEq(x | 4294967296, 0);
    assertEq(4294967296 | x, 0);
    assertEq(x & 4294967296, 0);
    assertEq(4294967296 & x, 0);
    assertEq(x ^ 4294967296, 0);
    assertEq(4294967296 ^ x, 0);
    assertEq(x >> 4294967296, 0);
    assertEq(4294967296 >> x, 0);
    assertEq(x >>> 4294967296, 0);
    assertEq(4294967296 >>> x, 0);
    assertEq(x << 4294967296, 0);
    assertEq(4294967296 << x, 0);
    assertEq(x | undefined, 0);
    assertEq(undefined | x, 0);
    assertEq(x & undefined, 0);
    assertEq(undefined & x, 0);
    assertEq(x ^ undefined, 0);
    assertEq(undefined ^ x, 0);
    assertEq(x >> undefined, 0);
    assertEq(undefined >> x, 0);
    assertEq(x >>> undefined, 0);
    assertEq(undefined >>> x, 0);
    assertEq(x << undefined, 0);
    assertEq(undefined << x, 0);
    assertEq(x | null, 0);
    assertEq(null | x, 0);
    assertEq(x & null, 0);
    assertEq(null & x, 0);
    assertEq(x ^ null, 0);
    assertEq(null ^ x, 0);
    assertEq(x >> null, 0);
    assertEq(null >> x, 0);
    assertEq(x >>> null, 0);
    assertEq(null >>> x, 0);
    assertEq(x << null, 0);
    assertEq(null << x, 0);
    assertEq(x | false, 0);
    assertEq(false | x, 0);
    assertEq(x & false, 0);
    assertEq(false & x, 0);
    assertEq(x ^ false, 0);
    assertEq(false ^ x, 0);
    assertEq(x >> false, 0);
    assertEq(false >> x, 0);
    assertEq(x >>> false, 0);
    assertEq(false >>> x, 0);
    assertEq(x << false, 0);
    assertEq(false << x, 0);
    assertEq(x | true, 1);
    assertEq(true | x, 1);
    assertEq(x & true, 0);
    assertEq(true & x, 0);
    assertEq(x ^ true, 1);
    assertEq(true ^ x, 1);
    assertEq(x >> true, 0);
    assertEq(true >> x, 1);
    assertEq(x >>> true, 0);
    assertEq(true >>> x, 1);
    assertEq(x << true, 0);
    assertEq(true << x, 1);
    assertEq(x | -1.5, -1);
    assertEq(-1.5 | x, -1);
    assertEq(x & -1.5, 0);
    assertEq(-1.5 & x, 0);
    assertEq(x ^ -1.5, -1);
    assertEq(-1.5 ^ x, -1);
    assertEq(x >> -1.5, 0);
    assertEq(-1.5 >> x, -1);
    assertEq(x >>> -1.5, 0);
    assertEq(-1.5 >>> x, 4294967295);
    assertEq(x << -1.5, 0);
    assertEq(-1.5 << x, -1);
}
test2(0)

function test3 (x) {
    assertEq(x | -1, -1);
    assertEq(-1 | x, -1);
    assertEq(x & -1, -1);
    assertEq(-1 & x, -1);
    assertEq(x ^ -1, 0);
    assertEq(-1 ^ x, 0);
    assertEq(x >> -1, -1);
    assertEq(-1 >> x, -1);
    assertEq(x >>> -1, 1);
    assertEq(-1 >>> x, 1);
    assertEq(x << -1, -2147483648);
    assertEq(-1 << x, -2147483648);
    assertEq(x | 1, -1);
    assertEq(1 | x, -1);
    assertEq(x & 1, 1);
    assertEq(1 & x, 1);
    assertEq(x ^ 1, -2);
    assertEq(1 ^ x, -2);
    assertEq(x >> 1, -1);
    assertEq(1 >> x, 0);
    assertEq(x >>> 1, 2147483647);
    assertEq(1 >>> x, 0);
    assertEq(x << 1, -2);
    assertEq(1 << x, -2147483648);
    assertEq(x | 0, -1);
    assertEq(0 | x, -1);
    assertEq(x & 0, 0);
    assertEq(0 & x, 0);
    assertEq(x ^ 0, -1);
    assertEq(0 ^ x, -1);
    assertEq(x >> 0, -1);
    assertEq(0 >> x, 0);
    assertEq(x >>> 0, 4294967295);
    assertEq(0 >>> x, 0);
    assertEq(x << 0, -1);
    assertEq(0 << x, 0);
    assertEq(x | 0xffffffff, -1);
    assertEq(0xffffffff | x, -1);
    assertEq(x & 0xffffffff, -1);
    assertEq(0xffffffff & x, -1);
    assertEq(x ^ 0xffffffff, 0);
    assertEq(0xffffffff ^ x, 0);
    assertEq(x >> 0xffffffff, -1);
    assertEq(0xffffffff >> x, -1);
    assertEq(x >>> 0xffffffff, 1);
    assertEq(0xffffffff >>> x, 1);
    assertEq(x << 0xffffffff, -2147483648);
    assertEq(0xffffffff << x, -2147483648);
    assertEq(x | "10.6", -1);
    assertEq("10.6" | x, -1);
    assertEq(x & "10.6", 10);
    assertEq("10.6" & x, 10);
    assertEq(x ^ "10.6", -11);
    assertEq("10.6" ^ x, -11);
    assertEq(x >> "10.6", -1);
    assertEq("10.6" >> x, 0);
    assertEq(x >>> "10.6", 4194303);
    assertEq("10.6" >>> x, 0);
    assertEq(x << "10.6", -1024);
    assertEq("10.6" << x, 0);
    assertEq(x | 2147483648, -1);
    assertEq(2147483648 | x, -1);
    assertEq(x & 2147483648, -2147483648);
    assertEq(2147483648 & x, -2147483648);
    assertEq(x ^ 2147483648, 2147483647);
    assertEq(2147483648 ^ x, 2147483647);
    assertEq(x >> 2147483648, -1);
    assertEq(2147483648 >> x, -1);
    assertEq(x >>> 2147483648, 4294967295);
    assertEq(2147483648 >>> x, 1);
    assertEq(x << 2147483648, -1);
    assertEq(2147483648 << x, 0);
    assertEq(x | 4294967296, -1);
    assertEq(4294967296 | x, -1);
    assertEq(x & 4294967296, 0);
    assertEq(4294967296 & x, 0);
    assertEq(x ^ 4294967296, -1);
    assertEq(4294967296 ^ x, -1);
    assertEq(x >> 4294967296, -1);
    assertEq(4294967296 >> x, 0);
    assertEq(x >>> 4294967296, 4294967295);
    assertEq(4294967296 >>> x, 0);
    assertEq(x << 4294967296, -1);
    assertEq(4294967296 << x, 0);
    assertEq(x | undefined, -1);
    assertEq(undefined | x, -1);
    assertEq(x & undefined, 0);
    assertEq(undefined & x, 0);
    assertEq(x ^ undefined, -1);
    assertEq(undefined ^ x, -1);
    assertEq(x >> undefined, -1);
    assertEq(undefined >> x, 0);
    assertEq(x >>> undefined, 4294967295);
    assertEq(undefined >>> x, 0);
    assertEq(x << undefined, -1);
    assertEq(undefined << x, 0);
    assertEq(x | null, -1);
    assertEq(null | x, -1);
    assertEq(x & null, 0);
    assertEq(null & x, 0);
    assertEq(x ^ null, -1);
    assertEq(null ^ x, -1);
    assertEq(x >> null, -1);
    assertEq(null >> x, 0);
    assertEq(x >>> null, 4294967295);
    assertEq(null >>> x, 0);
    assertEq(x << null, -1);
    assertEq(null << x, 0);
    assertEq(x | false, -1);
    assertEq(false | x, -1);
    assertEq(x & false, 0);
    assertEq(false & x, 0);
    assertEq(x ^ false, -1);
    assertEq(false ^ x, -1);
    assertEq(x >> false, -1);
    assertEq(false >> x, 0);
    assertEq(x >>> false, 4294967295);
    assertEq(false >>> x, 0);
    assertEq(x << false, -1);
    assertEq(false << x, 0);
    assertEq(x | true, -1);
    assertEq(true | x, -1);
    assertEq(x & true, 1);
    assertEq(true & x, 1);
    assertEq(x ^ true, -2);
    assertEq(true ^ x, -2);
    assertEq(x >> true, -1);
    assertEq(true >> x, 0);
    assertEq(x >>> true, 2147483647);
    assertEq(true >>> x, 0);
    assertEq(x << true, -2);
    assertEq(true << x, -2147483648);
    assertEq(x | -1.5, -1);
    assertEq(-1.5 | x, -1);
    assertEq(x & -1.5, -1);
    assertEq(-1.5 & x, -1);
    assertEq(x ^ -1.5, 0);
    assertEq(-1.5 ^ x, 0);
    assertEq(x >> -1.5, -1);
    assertEq(-1.5 >> x, -1);
    assertEq(x >>> -1.5, 1);
    assertEq(-1.5 >>> x, 1);
    assertEq(x << -1.5, -2147483648);
    assertEq(-1.5 << x, -2147483648);
}
test3(-1)

function test4 (x) {
    assertEq(x | -1, -1);
    assertEq(-1 | x, -1);
    assertEq(x & -1, -2147483648);
    assertEq(-1 & x, -2147483648);
    assertEq(x ^ -1, 2147483647);
    assertEq(-1 ^ x, 2147483647);
    assertEq(x >> -1, -1);
    assertEq(-1 >> x, -1);
    assertEq(x >>> -1, 1);
    assertEq(-1 >>> x, 4294967295);
    assertEq(x << -1, 0);
    assertEq(-1 << x, -1);
    assertEq(x | 1, -2147483647);
    assertEq(1 | x, -2147483647);
    assertEq(x & 1, 0);
    assertEq(1 & x, 0);
    assertEq(x ^ 1, -2147483647);
    assertEq(1 ^ x, -2147483647);
    assertEq(x >> 1, -1073741824);
    assertEq(1 >> x, 1);
    assertEq(x >>> 1, 1073741824);
    assertEq(1 >>> x, 1);
    assertEq(x << 1, 0);
    assertEq(1 << x, 1);
    assertEq(x | 0, -2147483648);
    assertEq(0 | x, -2147483648);
    assertEq(x & 0, 0);
    assertEq(0 & x, 0);
    assertEq(x ^ 0, -2147483648);
    assertEq(0 ^ x, -2147483648);
    assertEq(x >> 0, -2147483648);
    assertEq(0 >> x, 0);
    assertEq(x >>> 0, 2147483648);
    assertEq(0 >>> x, 0);
    assertEq(x << 0, -2147483648);
    assertEq(0 << x, 0);
    assertEq(x | 0xffffffff, -1);
    assertEq(0xffffffff | x, -1);
    assertEq(x & 0xffffffff, -2147483648);
    assertEq(0xffffffff & x, -2147483648);
    assertEq(x ^ 0xffffffff, 2147483647);
    assertEq(0xffffffff ^ x, 2147483647);
    assertEq(x >> 0xffffffff, -1);
    assertEq(0xffffffff >> x, -1);
    assertEq(x >>> 0xffffffff, 1);
    assertEq(0xffffffff >>> x, 4294967295);
    assertEq(x << 0xffffffff, 0);
    assertEq(0xffffffff << x, -1);
    assertEq(x | "10.6", -2147483638);
    assertEq("10.6" | x, -2147483638);
    assertEq(x & "10.6", 0);
    assertEq("10.6" & x, 0);
    assertEq(x ^ "10.6", -2147483638);
    assertEq("10.6" ^ x, -2147483638);
    assertEq(x >> "10.6", -2097152);
    assertEq("10.6" >> x, 10);
    assertEq(x >>> "10.6", 2097152);
    assertEq("10.6" >>> x, 10);
    assertEq(x << "10.6", 0);
    assertEq("10.6" << x, 10);
    assertEq(x | 2147483648, -2147483648);
    assertEq(2147483648 | x, -2147483648);
    assertEq(x & 2147483648, -2147483648);
    assertEq(2147483648 & x, -2147483648);
    assertEq(x ^ 2147483648, 0);
    assertEq(2147483648 ^ x, 0);
    assertEq(x >> 2147483648, -2147483648);
    assertEq(2147483648 >> x, -2147483648);
    assertEq(x >>> 2147483648, 2147483648);
    assertEq(2147483648 >>> x, 2147483648);
    assertEq(x << 2147483648, -2147483648);
    assertEq(2147483648 << x, -2147483648);
    assertEq(x | 4294967296, -2147483648);
    assertEq(4294967296 | x, -2147483648);
    assertEq(x & 4294967296, 0);
    assertEq(4294967296 & x, 0);
    assertEq(x ^ 4294967296, -2147483648);
    assertEq(4294967296 ^ x, -2147483648);
    assertEq(x >> 4294967296, -2147483648);
    assertEq(4294967296 >> x, 0);
    assertEq(x >>> 4294967296, 2147483648);
    assertEq(4294967296 >>> x, 0);
    assertEq(x << 4294967296, -2147483648);
    assertEq(4294967296 << x, 0);
    assertEq(x | undefined, -2147483648);
    assertEq(undefined | x, -2147483648);
    assertEq(x & undefined, 0);
    assertEq(undefined & x, 0);
    assertEq(x ^ undefined, -2147483648);
    assertEq(undefined ^ x, -2147483648);
    assertEq(x >> undefined, -2147483648);
    assertEq(undefined >> x, 0);
    assertEq(x >>> undefined, 2147483648);
    assertEq(undefined >>> x, 0);
    assertEq(x << undefined, -2147483648);
    assertEq(undefined << x, 0);
    assertEq(x | null, -2147483648);
    assertEq(null | x, -2147483648);
    assertEq(x & null, 0);
    assertEq(null & x, 0);
    assertEq(x ^ null, -2147483648);
    assertEq(null ^ x, -2147483648);
    assertEq(x >> null, -2147483648);
    assertEq(null >> x, 0);
    assertEq(x >>> null, 2147483648);
    assertEq(null >>> x, 0);
    assertEq(x << null, -2147483648);
    assertEq(null << x, 0);
    assertEq(x | false, -2147483648);
    assertEq(false | x, -2147483648);
    assertEq(x & false, 0);
    assertEq(false & x, 0);
    assertEq(x ^ false, -2147483648);
    assertEq(false ^ x, -2147483648);
    assertEq(x >> false, -2147483648);
    assertEq(false >> x, 0);
    assertEq(x >>> false, 2147483648);
    assertEq(false >>> x, 0);
    assertEq(x << false, -2147483648);
    assertEq(false << x, 0);
    assertEq(x | true, -2147483647);
    assertEq(true | x, -2147483647);
    assertEq(x & true, 0);
    assertEq(true & x, 0);
    assertEq(x ^ true, -2147483647);
    assertEq(true ^ x, -2147483647);
    assertEq(x >> true, -1073741824);
    assertEq(true >> x, 1);
    assertEq(x >>> true, 1073741824);
    assertEq(true >>> x, 1);
    assertEq(x << true, 0);
    assertEq(true << x, 1);
    assertEq(x | -1.5, -1);
    assertEq(-1.5 | x, -1);
    assertEq(x & -1.5, -2147483648);
    assertEq(-1.5 & x, -2147483648);
    assertEq(x ^ -1.5, 2147483647);
    assertEq(-1.5 ^ x, 2147483647);
    assertEq(x >> -1.5, -1);
    assertEq(-1.5 >> x, -1);
    assertEq(x >>> -1.5, 1);
    assertEq(-1.5 >>> x, 4294967295);
    assertEq(x << -1.5, 0);
    assertEq(-1.5 << x, -1);
}
test4(2147483648)

function test5 (x) {
    assertEq(x | -1, -1);
    assertEq(-1 | x, -1);
    assertEq(x & -1, -2147483648);
    assertEq(-1 & x, -2147483648);
    assertEq(x ^ -1, 2147483647);
    assertEq(-1 ^ x, 2147483647);
    assertEq(x >> -1, -1);
    assertEq(-1 >> x, -1);
    assertEq(x >>> -1, 1);
    assertEq(-1 >>> x, 4294967295);
    assertEq(x << -1, 0);
    assertEq(-1 << x, -1);
    assertEq(x | 1, -2147483647);
    assertEq(1 | x, -2147483647);
    assertEq(x & 1, 0);
    assertEq(1 & x, 0);
    assertEq(x ^ 1, -2147483647);
    assertEq(1 ^ x, -2147483647);
    assertEq(x >> 1, -1073741824);
    assertEq(1 >> x, 1);
    assertEq(x >>> 1, 1073741824);
    assertEq(1 >>> x, 1);
    assertEq(x << 1, 0);
    assertEq(1 << x, 1);
    assertEq(x | 0, -2147483648);
    assertEq(0 | x, -2147483648);
    assertEq(x & 0, 0);
    assertEq(0 & x, 0);
    assertEq(x ^ 0, -2147483648);
    assertEq(0 ^ x, -2147483648);
    assertEq(x >> 0, -2147483648);
    assertEq(0 >> x, 0);
    assertEq(x >>> 0, 2147483648);
    assertEq(0 >>> x, 0);
    assertEq(x << 0, -2147483648);
    assertEq(0 << x, 0);
    assertEq(x | 0xffffffff, -1);
    assertEq(0xffffffff | x, -1);
    assertEq(x & 0xffffffff, -2147483648);
    assertEq(0xffffffff & x, -2147483648);
    assertEq(x ^ 0xffffffff, 2147483647);
    assertEq(0xffffffff ^ x, 2147483647);
    assertEq(x >> 0xffffffff, -1);
    assertEq(0xffffffff >> x, -1);
    assertEq(x >>> 0xffffffff, 1);
    assertEq(0xffffffff >>> x, 4294967295);
    assertEq(x << 0xffffffff, 0);
    assertEq(0xffffffff << x, -1);
    assertEq(x | "10.6", -2147483638);
    assertEq("10.6" | x, -2147483638);
    assertEq(x & "10.6", 0);
    assertEq("10.6" & x, 0);
    assertEq(x ^ "10.6", -2147483638);
    assertEq("10.6" ^ x, -2147483638);
    assertEq(x >> "10.6", -2097152);
    assertEq("10.6" >> x, 10);
    assertEq(x >>> "10.6", 2097152);
    assertEq("10.6" >>> x, 10);
    assertEq(x << "10.6", 0);
    assertEq("10.6" << x, 10);
    assertEq(x | 2147483648, -2147483648);
    assertEq(2147483648 | x, -2147483648);
    assertEq(x & 2147483648, -2147483648);
    assertEq(2147483648 & x, -2147483648);
    assertEq(x ^ 2147483648, 0);
    assertEq(2147483648 ^ x, 0);
    assertEq(x >> 2147483648, -2147483648);
    assertEq(2147483648 >> x, -2147483648);
    assertEq(x >>> 2147483648, 2147483648);
    assertEq(2147483648 >>> x, 2147483648);
    assertEq(x << 2147483648, -2147483648);
    assertEq(2147483648 << x, -2147483648);
    assertEq(x | 4294967296, -2147483648);
    assertEq(4294967296 | x, -2147483648);
    assertEq(x & 4294967296, 0);
    assertEq(4294967296 & x, 0);
    assertEq(x ^ 4294967296, -2147483648);
    assertEq(4294967296 ^ x, -2147483648);
    assertEq(x >> 4294967296, -2147483648);
    assertEq(4294967296 >> x, 0);
    assertEq(x >>> 4294967296, 2147483648);
    assertEq(4294967296 >>> x, 0);
    assertEq(x << 4294967296, -2147483648);
    assertEq(4294967296 << x, 0);
    assertEq(x | undefined, -2147483648);
    assertEq(undefined | x, -2147483648);
    assertEq(x & undefined, 0);
    assertEq(undefined & x, 0);
    assertEq(x ^ undefined, -2147483648);
    assertEq(undefined ^ x, -2147483648);
    assertEq(x >> undefined, -2147483648);
    assertEq(undefined >> x, 0);
    assertEq(x >>> undefined, 2147483648);
    assertEq(undefined >>> x, 0);
    assertEq(x << undefined, -2147483648);
    assertEq(undefined << x, 0);
    assertEq(x | null, -2147483648);
    assertEq(null | x, -2147483648);
    assertEq(x & null, 0);
    assertEq(null & x, 0);
    assertEq(x ^ null, -2147483648);
    assertEq(null ^ x, -2147483648);
    assertEq(x >> null, -2147483648);
    assertEq(null >> x, 0);
    assertEq(x >>> null, 2147483648);
    assertEq(null >>> x, 0);
    assertEq(x << null, -2147483648);
    assertEq(null << x, 0);
    assertEq(x | false, -2147483648);
    assertEq(false | x, -2147483648);
    assertEq(x & false, 0);
    assertEq(false & x, 0);
    assertEq(x ^ false, -2147483648);
    assertEq(false ^ x, -2147483648);
    assertEq(x >> false, -2147483648);
    assertEq(false >> x, 0);
    assertEq(x >>> false, 2147483648);
    assertEq(false >>> x, 0);
    assertEq(x << false, -2147483648);
    assertEq(false << x, 0);
    assertEq(x | true, -2147483647);
    assertEq(true | x, -2147483647);
    assertEq(x & true, 0);
    assertEq(true & x, 0);
    assertEq(x ^ true, -2147483647);
    assertEq(true ^ x, -2147483647);
    assertEq(x >> true, -1073741824);
    assertEq(true >> x, 1);
    assertEq(x >>> true, 1073741824);
    assertEq(true >>> x, 1);
    assertEq(x << true, 0);
    assertEq(true << x, 1);
    assertEq(x | -1.5, -1);
    assertEq(-1.5 | x, -1);
    assertEq(x & -1.5, -2147483648);
    assertEq(-1.5 & x, -2147483648);
    assertEq(x ^ -1.5, 2147483647);
    assertEq(-1.5 ^ x, 2147483647);
    assertEq(x >> -1.5, -1);
    assertEq(-1.5 >> x, -1);
    assertEq(x >>> -1.5, 1);
    assertEq(-1.5 >>> x, 4294967295);
    assertEq(x << -1.5, 0);
    assertEq(-1.5 << x, -1);
}
test5(-2147483648)


